{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 共享单车租用情况分析\n",
    "---"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 导入相关工具包"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 导入相关的包\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import seaborn as sns\n",
    "import matplotlib.pyplot as plt\n",
    "import matplotlib.style as psl\n",
    "%matplotlib inline\n",
    "plt.rcParams[\"font.sans-serif\"] = [\"SimHei\"]  # 可正常显示中文\n",
    "plt.rcParams[\"axes.unicode_minus\"] = False  # 可正常显示英文\n",
    "plt.rcParams[\"font.size\"]=20  # 设置字体大小"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 任务一：数据加载"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 导入trip_data数据为df1\n",
    "##################################begin######################################\n",
    "df1 = pd.read_csv(\"trip_data.csv\")\n",
    "###################################end#######################################\n",
    "\n",
    "# 导入weather_data数据为df2\n",
    "##################################begin######################################\n",
    "df2 = pd.read_csv(\"weather_data.csv\")\n",
    "###################################end#######################################"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>trip_id</th>\n",
       "      <th>starttime</th>\n",
       "      <th>stoptime</th>\n",
       "      <th>bikeid</th>\n",
       "      <th>tripduration</th>\n",
       "      <th>from_station_name</th>\n",
       "      <th>to_station_name</th>\n",
       "      <th>from_station_id</th>\n",
       "      <th>to_station_id</th>\n",
       "      <th>usertype</th>\n",
       "      <th>gender</th>\n",
       "      <th>birthyear</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>431</td>\n",
       "      <td>10/13/2014 10:31</td>\n",
       "      <td>10/13/2014 10:48</td>\n",
       "      <td>SEA00298</td>\n",
       "      <td>985.935</td>\n",
       "      <td>2nd Ave &amp; Spring St</td>\n",
       "      <td>Occidental Park / Occidental Ave S &amp; S Washing...</td>\n",
       "      <td>CBD-06</td>\n",
       "      <td>PS-04</td>\n",
       "      <td>Annual Member</td>\n",
       "      <td>Male</td>\n",
       "      <td>1960.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>432</td>\n",
       "      <td>10/13/2014 10:32</td>\n",
       "      <td>10/13/2014 10:48</td>\n",
       "      <td>SEA00195</td>\n",
       "      <td>926.375</td>\n",
       "      <td>2nd Ave &amp; Spring St</td>\n",
       "      <td>Occidental Park / Occidental Ave S &amp; S Washing...</td>\n",
       "      <td>CBD-06</td>\n",
       "      <td>PS-04</td>\n",
       "      <td>Annual Member</td>\n",
       "      <td>Male</td>\n",
       "      <td>1970.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>433</td>\n",
       "      <td>10/13/2014 10:33</td>\n",
       "      <td>10/13/2014 10:48</td>\n",
       "      <td>SEA00486</td>\n",
       "      <td>883.831</td>\n",
       "      <td>2nd Ave &amp; Spring St</td>\n",
       "      <td>Occidental Park / Occidental Ave S &amp; S Washing...</td>\n",
       "      <td>CBD-06</td>\n",
       "      <td>PS-04</td>\n",
       "      <td>Annual Member</td>\n",
       "      <td>Female</td>\n",
       "      <td>1988.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>434</td>\n",
       "      <td>10/13/2014 10:34</td>\n",
       "      <td>10/13/2014 10:48</td>\n",
       "      <td>SEA00333</td>\n",
       "      <td>865.937</td>\n",
       "      <td>2nd Ave &amp; Spring St</td>\n",
       "      <td>Occidental Park / Occidental Ave S &amp; S Washing...</td>\n",
       "      <td>CBD-06</td>\n",
       "      <td>PS-04</td>\n",
       "      <td>Annual Member</td>\n",
       "      <td>Female</td>\n",
       "      <td>1977.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>435</td>\n",
       "      <td>10/13/2014 10:34</td>\n",
       "      <td>10/13/2014 10:49</td>\n",
       "      <td>SEA00202</td>\n",
       "      <td>923.923</td>\n",
       "      <td>2nd Ave &amp; Spring St</td>\n",
       "      <td>Occidental Park / Occidental Ave S &amp; S Washing...</td>\n",
       "      <td>CBD-06</td>\n",
       "      <td>PS-04</td>\n",
       "      <td>Annual Member</td>\n",
       "      <td>Male</td>\n",
       "      <td>1971.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>142841</th>\n",
       "      <td>156796</td>\n",
       "      <td>10/12/2015 20:41</td>\n",
       "      <td>10/12/2015 20:47</td>\n",
       "      <td>SEA00358</td>\n",
       "      <td>377.183</td>\n",
       "      <td>E Pine St &amp; 16th Ave</td>\n",
       "      <td>Summit Ave &amp; E Denny Way</td>\n",
       "      <td>CH-07</td>\n",
       "      <td>CH-01</td>\n",
       "      <td>Annual Member</td>\n",
       "      <td>Male</td>\n",
       "      <td>1990.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>142842</th>\n",
       "      <td>156797</td>\n",
       "      <td>10/12/2015 20:43</td>\n",
       "      <td>10/12/2015 20:48</td>\n",
       "      <td>SEA00399</td>\n",
       "      <td>303.330</td>\n",
       "      <td>Bellevue Ave &amp; E Pine St</td>\n",
       "      <td>Summit Ave E &amp; E Republican St</td>\n",
       "      <td>CH-12</td>\n",
       "      <td>CH-03</td>\n",
       "      <td>Annual Member</td>\n",
       "      <td>Male</td>\n",
       "      <td>1978.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>142843</th>\n",
       "      <td>156798</td>\n",
       "      <td>10/12/2015 21:03</td>\n",
       "      <td>10/12/2015 21:06</td>\n",
       "      <td>SEA00204</td>\n",
       "      <td>165.597</td>\n",
       "      <td>Harvard Ave &amp; E Pine St</td>\n",
       "      <td>E Harrison St &amp; Broadway Ave E</td>\n",
       "      <td>CH-09</td>\n",
       "      <td>CH-02</td>\n",
       "      <td>Annual Member</td>\n",
       "      <td>Male</td>\n",
       "      <td>1989.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>142844</th>\n",
       "      <td>156799</td>\n",
       "      <td>10/12/2015 21:35</td>\n",
       "      <td>10/12/2015 21:41</td>\n",
       "      <td>SEA00073</td>\n",
       "      <td>388.576</td>\n",
       "      <td>Pine St &amp; 9th Ave</td>\n",
       "      <td>3rd Ave &amp; Broad St</td>\n",
       "      <td>SLU-16</td>\n",
       "      <td>BT-01</td>\n",
       "      <td>Short-Term Pass Holder</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>142845</th>\n",
       "      <td>156800</td>\n",
       "      <td>10/12/2015 22:45</td>\n",
       "      <td>10/12/2015 22:51</td>\n",
       "      <td>SEA00033</td>\n",
       "      <td>391.885</td>\n",
       "      <td>NE 42nd St &amp; University Way NE</td>\n",
       "      <td>Eastlake Ave E &amp; E Allison St</td>\n",
       "      <td>UD-02</td>\n",
       "      <td>EL-05</td>\n",
       "      <td>Annual Member</td>\n",
       "      <td>Male</td>\n",
       "      <td>1985.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>142846 rows × 12 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "        trip_id         starttime          stoptime    bikeid  tripduration  \\\n",
       "0           431  10/13/2014 10:31  10/13/2014 10:48  SEA00298       985.935   \n",
       "1           432  10/13/2014 10:32  10/13/2014 10:48  SEA00195       926.375   \n",
       "2           433  10/13/2014 10:33  10/13/2014 10:48  SEA00486       883.831   \n",
       "3           434  10/13/2014 10:34  10/13/2014 10:48  SEA00333       865.937   \n",
       "4           435  10/13/2014 10:34  10/13/2014 10:49  SEA00202       923.923   \n",
       "...         ...               ...               ...       ...           ...   \n",
       "142841   156796  10/12/2015 20:41  10/12/2015 20:47  SEA00358       377.183   \n",
       "142842   156797  10/12/2015 20:43  10/12/2015 20:48  SEA00399       303.330   \n",
       "142843   156798  10/12/2015 21:03  10/12/2015 21:06  SEA00204       165.597   \n",
       "142844   156799  10/12/2015 21:35  10/12/2015 21:41  SEA00073       388.576   \n",
       "142845   156800  10/12/2015 22:45  10/12/2015 22:51  SEA00033       391.885   \n",
       "\n",
       "                     from_station_name  \\\n",
       "0                  2nd Ave & Spring St   \n",
       "1                  2nd Ave & Spring St   \n",
       "2                  2nd Ave & Spring St   \n",
       "3                  2nd Ave & Spring St   \n",
       "4                  2nd Ave & Spring St   \n",
       "...                                ...   \n",
       "142841            E Pine St & 16th Ave   \n",
       "142842        Bellevue Ave & E Pine St   \n",
       "142843         Harvard Ave & E Pine St   \n",
       "142844               Pine St & 9th Ave   \n",
       "142845  NE 42nd St & University Way NE   \n",
       "\n",
       "                                          to_station_name from_station_id  \\\n",
       "0       Occidental Park / Occidental Ave S & S Washing...          CBD-06   \n",
       "1       Occidental Park / Occidental Ave S & S Washing...          CBD-06   \n",
       "2       Occidental Park / Occidental Ave S & S Washing...          CBD-06   \n",
       "3       Occidental Park / Occidental Ave S & S Washing...          CBD-06   \n",
       "4       Occidental Park / Occidental Ave S & S Washing...          CBD-06   \n",
       "...                                                   ...             ...   \n",
       "142841                           Summit Ave & E Denny Way           CH-07   \n",
       "142842                     Summit Ave E & E Republican St           CH-12   \n",
       "142843                     E Harrison St & Broadway Ave E           CH-09   \n",
       "142844                                 3rd Ave & Broad St          SLU-16   \n",
       "142845                      Eastlake Ave E & E Allison St           UD-02   \n",
       "\n",
       "       to_station_id                usertype  gender  birthyear  \n",
       "0              PS-04           Annual Member    Male     1960.0  \n",
       "1              PS-04           Annual Member    Male     1970.0  \n",
       "2              PS-04           Annual Member  Female     1988.0  \n",
       "3              PS-04           Annual Member  Female     1977.0  \n",
       "4              PS-04           Annual Member    Male     1971.0  \n",
       "...              ...                     ...     ...        ...  \n",
       "142841         CH-01           Annual Member    Male     1990.0  \n",
       "142842         CH-03           Annual Member    Male     1978.0  \n",
       "142843         CH-02           Annual Member    Male     1989.0  \n",
       "142844         BT-01  Short-Term Pass Holder     NaN        NaN  \n",
       "142845         EL-05           Annual Member    Male     1985.0  \n",
       "\n",
       "[142846 rows x 12 columns]"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 单车订单数据\n",
    "df1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Date</th>\n",
       "      <th>Max_Temperature_F</th>\n",
       "      <th>Mean_Temperature_F</th>\n",
       "      <th>Min_TemperatureF</th>\n",
       "      <th>Max_Dew_Point_F</th>\n",
       "      <th>MeanDew_Point_F</th>\n",
       "      <th>Min_Dewpoint_F</th>\n",
       "      <th>Max_Humidity</th>\n",
       "      <th>Mean_Humidity</th>\n",
       "      <th>Min_Humidity</th>\n",
       "      <th>...</th>\n",
       "      <th>Mean_Sea_Level_Pressure_In</th>\n",
       "      <th>Min_Sea_Level_Pressure_In</th>\n",
       "      <th>Max_Visibility_Miles</th>\n",
       "      <th>Mean_Visibility_Miles</th>\n",
       "      <th>Min_Visibility_Miles</th>\n",
       "      <th>Max_Wind_Speed_MPH</th>\n",
       "      <th>Mean_Wind_Speed_MPH</th>\n",
       "      <th>Max_Gust_Speed_MPH</th>\n",
       "      <th>Precipitation_In</th>\n",
       "      <th>Events</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>10/13/2014</td>\n",
       "      <td>71.0</td>\n",
       "      <td>62.0</td>\n",
       "      <td>54.0</td>\n",
       "      <td>55.0</td>\n",
       "      <td>51.0</td>\n",
       "      <td>46.0</td>\n",
       "      <td>87.0</td>\n",
       "      <td>68.0</td>\n",
       "      <td>46.0</td>\n",
       "      <td>...</td>\n",
       "      <td>29.79</td>\n",
       "      <td>29.65</td>\n",
       "      <td>10.0</td>\n",
       "      <td>10.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>13.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>21</td>\n",
       "      <td>0.00</td>\n",
       "      <td>Rain</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>10/14/2014</td>\n",
       "      <td>63.0</td>\n",
       "      <td>59.0</td>\n",
       "      <td>55.0</td>\n",
       "      <td>52.0</td>\n",
       "      <td>51.0</td>\n",
       "      <td>50.0</td>\n",
       "      <td>88.0</td>\n",
       "      <td>78.0</td>\n",
       "      <td>63.0</td>\n",
       "      <td>...</td>\n",
       "      <td>29.75</td>\n",
       "      <td>29.54</td>\n",
       "      <td>10.0</td>\n",
       "      <td>9.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>10.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>17</td>\n",
       "      <td>0.11</td>\n",
       "      <td>Rain</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>10/15/2014</td>\n",
       "      <td>62.0</td>\n",
       "      <td>58.0</td>\n",
       "      <td>54.0</td>\n",
       "      <td>53.0</td>\n",
       "      <td>50.0</td>\n",
       "      <td>46.0</td>\n",
       "      <td>87.0</td>\n",
       "      <td>77.0</td>\n",
       "      <td>67.0</td>\n",
       "      <td>...</td>\n",
       "      <td>29.71</td>\n",
       "      <td>29.51</td>\n",
       "      <td>10.0</td>\n",
       "      <td>9.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>18.0</td>\n",
       "      <td>7.0</td>\n",
       "      <td>25</td>\n",
       "      <td>0.45</td>\n",
       "      <td>Rain</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>10/16/2014</td>\n",
       "      <td>71.0</td>\n",
       "      <td>61.0</td>\n",
       "      <td>52.0</td>\n",
       "      <td>49.0</td>\n",
       "      <td>46.0</td>\n",
       "      <td>42.0</td>\n",
       "      <td>83.0</td>\n",
       "      <td>61.0</td>\n",
       "      <td>36.0</td>\n",
       "      <td>...</td>\n",
       "      <td>29.95</td>\n",
       "      <td>29.81</td>\n",
       "      <td>10.0</td>\n",
       "      <td>10.0</td>\n",
       "      <td>10.0</td>\n",
       "      <td>9.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>-</td>\n",
       "      <td>0.00</td>\n",
       "      <td>Rain</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>10/17/2014</td>\n",
       "      <td>64.0</td>\n",
       "      <td>60.0</td>\n",
       "      <td>57.0</td>\n",
       "      <td>55.0</td>\n",
       "      <td>51.0</td>\n",
       "      <td>41.0</td>\n",
       "      <td>87.0</td>\n",
       "      <td>72.0</td>\n",
       "      <td>46.0</td>\n",
       "      <td>...</td>\n",
       "      <td>29.78</td>\n",
       "      <td>29.73</td>\n",
       "      <td>10.0</td>\n",
       "      <td>10.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>8.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>-</td>\n",
       "      <td>0.14</td>\n",
       "      <td>Rain</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>361</th>\n",
       "      <td>10/9/2015</td>\n",
       "      <td>70.0</td>\n",
       "      <td>62.0</td>\n",
       "      <td>55.0</td>\n",
       "      <td>59.0</td>\n",
       "      <td>55.0</td>\n",
       "      <td>50.0</td>\n",
       "      <td>94.0</td>\n",
       "      <td>77.0</td>\n",
       "      <td>63.0</td>\n",
       "      <td>...</td>\n",
       "      <td>29.94</td>\n",
       "      <td>29.90</td>\n",
       "      <td>10.0</td>\n",
       "      <td>7.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>9.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>-</td>\n",
       "      <td>0.01</td>\n",
       "      <td>Fog , Rain</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>362</th>\n",
       "      <td>10/10/2015</td>\n",
       "      <td>72.0</td>\n",
       "      <td>66.0</td>\n",
       "      <td>60.0</td>\n",
       "      <td>62.0</td>\n",
       "      <td>57.0</td>\n",
       "      <td>51.0</td>\n",
       "      <td>88.0</td>\n",
       "      <td>79.0</td>\n",
       "      <td>57.0</td>\n",
       "      <td>...</td>\n",
       "      <td>29.75</td>\n",
       "      <td>29.57</td>\n",
       "      <td>10.0</td>\n",
       "      <td>8.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>16.0</td>\n",
       "      <td>8.0</td>\n",
       "      <td>29</td>\n",
       "      <td>0.77</td>\n",
       "      <td>Rain</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>363</th>\n",
       "      <td>10/11/2015</td>\n",
       "      <td>66.0</td>\n",
       "      <td>60.0</td>\n",
       "      <td>54.0</td>\n",
       "      <td>51.0</td>\n",
       "      <td>49.0</td>\n",
       "      <td>46.0</td>\n",
       "      <td>84.0</td>\n",
       "      <td>69.0</td>\n",
       "      <td>50.0</td>\n",
       "      <td>...</td>\n",
       "      <td>30.12</td>\n",
       "      <td>30.00</td>\n",
       "      <td>10.0</td>\n",
       "      <td>10.0</td>\n",
       "      <td>10.0</td>\n",
       "      <td>10.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>-</td>\n",
       "      <td>0.00</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>364</th>\n",
       "      <td>10/12/2015</td>\n",
       "      <td>68.0</td>\n",
       "      <td>61.0</td>\n",
       "      <td>54.0</td>\n",
       "      <td>61.0</td>\n",
       "      <td>53.0</td>\n",
       "      <td>46.0</td>\n",
       "      <td>94.0</td>\n",
       "      <td>76.0</td>\n",
       "      <td>59.0</td>\n",
       "      <td>...</td>\n",
       "      <td>30.10</td>\n",
       "      <td>30.05</td>\n",
       "      <td>10.0</td>\n",
       "      <td>7.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>12.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>21</td>\n",
       "      <td>0.34</td>\n",
       "      <td>Rain</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>365</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>366 rows × 21 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "           Date  Max_Temperature_F  Mean_Temperature_F  Min_TemperatureF  \\\n",
       "0    10/13/2014               71.0                62.0              54.0   \n",
       "1    10/14/2014               63.0                59.0              55.0   \n",
       "2    10/15/2014               62.0                58.0              54.0   \n",
       "3    10/16/2014               71.0                61.0              52.0   \n",
       "4    10/17/2014               64.0                60.0              57.0   \n",
       "..          ...                ...                 ...               ...   \n",
       "361   10/9/2015               70.0                62.0              55.0   \n",
       "362  10/10/2015               72.0                66.0              60.0   \n",
       "363  10/11/2015               66.0                60.0              54.0   \n",
       "364  10/12/2015               68.0                61.0              54.0   \n",
       "365         NaN                NaN                 NaN               NaN   \n",
       "\n",
       "     Max_Dew_Point_F  MeanDew_Point_F  Min_Dewpoint_F  Max_Humidity  \\\n",
       "0               55.0             51.0            46.0          87.0   \n",
       "1               52.0             51.0            50.0          88.0   \n",
       "2               53.0             50.0            46.0          87.0   \n",
       "3               49.0             46.0            42.0          83.0   \n",
       "4               55.0             51.0            41.0          87.0   \n",
       "..               ...              ...             ...           ...   \n",
       "361             59.0             55.0            50.0          94.0   \n",
       "362             62.0             57.0            51.0          88.0   \n",
       "363             51.0             49.0            46.0          84.0   \n",
       "364             61.0             53.0            46.0          94.0   \n",
       "365              NaN              NaN             NaN           NaN   \n",
       "\n",
       "     Mean_Humidity   Min_Humidity   ...  Mean_Sea_Level_Pressure_In   \\\n",
       "0              68.0           46.0  ...                        29.79   \n",
       "1              78.0           63.0  ...                        29.75   \n",
       "2              77.0           67.0  ...                        29.71   \n",
       "3              61.0           36.0  ...                        29.95   \n",
       "4              72.0           46.0  ...                        29.78   \n",
       "..              ...            ...  ...                          ...   \n",
       "361            77.0           63.0  ...                        29.94   \n",
       "362            79.0           57.0  ...                        29.75   \n",
       "363            69.0           50.0  ...                        30.12   \n",
       "364            76.0           59.0  ...                        30.10   \n",
       "365             NaN            NaN  ...                          NaN   \n",
       "\n",
       "     Min_Sea_Level_Pressure_In   Max_Visibility_Miles   \\\n",
       "0                         29.65                   10.0   \n",
       "1                         29.54                   10.0   \n",
       "2                         29.51                   10.0   \n",
       "3                         29.81                   10.0   \n",
       "4                         29.73                   10.0   \n",
       "..                          ...                    ...   \n",
       "361                       29.90                   10.0   \n",
       "362                       29.57                   10.0   \n",
       "363                       30.00                   10.0   \n",
       "364                       30.05                   10.0   \n",
       "365                         NaN                    NaN   \n",
       "\n",
       "     Mean_Visibility_Miles   Min_Visibility_Miles   Max_Wind_Speed_MPH   \\\n",
       "0                      10.0                    4.0                 13.0   \n",
       "1                       9.0                    3.0                 10.0   \n",
       "2                       9.0                    3.0                 18.0   \n",
       "3                      10.0                   10.0                  9.0   \n",
       "4                      10.0                    6.0                  8.0   \n",
       "..                      ...                    ...                  ...   \n",
       "361                     7.0                    0.0                  9.0   \n",
       "362                     8.0                    3.0                 16.0   \n",
       "363                    10.0                   10.0                 10.0   \n",
       "364                     7.0                    2.0                 12.0   \n",
       "365                     NaN                    NaN                  NaN   \n",
       "\n",
       "     Mean_Wind_Speed_MPH   Max_Gust_Speed_MPH Precipitation_In       Events  \n",
       "0                     4.0                  21              0.00        Rain  \n",
       "1                     5.0                  17              0.11        Rain  \n",
       "2                     7.0                  25              0.45        Rain  \n",
       "3                     4.0                   -              0.00        Rain  \n",
       "4                     3.0                   -              0.14        Rain  \n",
       "..                    ...                 ...               ...         ...  \n",
       "361                   4.0                   -              0.01  Fog , Rain  \n",
       "362                   8.0                  29              0.77        Rain  \n",
       "363                   5.0                   -              0.00         NaN  \n",
       "364                   6.0                  21              0.34        Rain  \n",
       "365                   NaN                 NaN               NaN         NaN  \n",
       "\n",
       "[366 rows x 21 columns]"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 天气数据\n",
    "df2"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 任务二：数据清洗"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1、数据概览"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 142846 entries, 0 to 142845\n",
      "Data columns (total 12 columns):\n",
      " #   Column             Non-Null Count   Dtype  \n",
      "---  ------             --------------   -----  \n",
      " 0   trip_id            142846 non-null  int64  \n",
      " 1   starttime          142846 non-null  object \n",
      " 2   stoptime           142846 non-null  object \n",
      " 3   bikeid             142846 non-null  object \n",
      " 4   tripduration       142846 non-null  float64\n",
      " 5   from_station_name  142846 non-null  object \n",
      " 6   to_station_name    142846 non-null  object \n",
      " 7   from_station_id    142846 non-null  object \n",
      " 8   to_station_id      142846 non-null  object \n",
      " 9   usertype           142846 non-null  object \n",
      " 10  gender             87360 non-null   object \n",
      " 11  birthyear          87360 non-null   float64\n",
      "dtypes: float64(2), int64(1), object(9)\n",
      "memory usage: 13.1+ MB\n"
     ]
    }
   ],
   "source": [
    "# 对df1数据文件进行查看\n",
    "##################################begin######################################\n",
    "df1.info()\n",
    "###################################end#######################################"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 366 entries, 0 to 365\n",
      "Data columns (total 21 columns):\n",
      " #   Column                       Non-Null Count  Dtype  \n",
      "---  ------                       --------------  -----  \n",
      " 0   Date                         365 non-null    object \n",
      " 1   Max_Temperature_F            365 non-null    float64\n",
      " 2   Mean_Temperature_F           365 non-null    float64\n",
      " 3   Min_TemperatureF             365 non-null    float64\n",
      " 4   Max_Dew_Point_F              365 non-null    float64\n",
      " 5   MeanDew_Point_F              365 non-null    float64\n",
      " 6   Min_Dewpoint_F               365 non-null    float64\n",
      " 7   Max_Humidity                 365 non-null    float64\n",
      " 8   Mean_Humidity                365 non-null    float64\n",
      " 9   Min_Humidity                 365 non-null    float64\n",
      " 10  Max_Sea_Level_Pressure_In    365 non-null    float64\n",
      " 11  Mean_Sea_Level_Pressure_In   365 non-null    float64\n",
      " 12  Min_Sea_Level_Pressure_In    365 non-null    float64\n",
      " 13  Max_Visibility_Miles         365 non-null    float64\n",
      " 14  Mean_Visibility_Miles        365 non-null    float64\n",
      " 15  Min_Visibility_Miles         365 non-null    float64\n",
      " 16  Max_Wind_Speed_MPH           365 non-null    float64\n",
      " 17  Mean_Wind_Speed_MPH          365 non-null    float64\n",
      " 18  Max_Gust_Speed_MPH           365 non-null    object \n",
      " 19  Precipitation_In             365 non-null    float64\n",
      " 20  Events                       161 non-null    object \n",
      "dtypes: float64(18), object(3)\n",
      "memory usage: 60.2+ KB\n"
     ]
    }
   ],
   "source": [
    "# 对df2数据文件进行查看\n",
    "##################################begin######################################\n",
    "df2.info()\n",
    "###################################end#######################################"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2、数据剔除"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "        trip_id    bikeid  tripduration         starttime  \\\n",
      "0           431  SEA00298       985.935  10/13/2014 10:31   \n",
      "1           432  SEA00195       926.375  10/13/2014 10:32   \n",
      "2           433  SEA00486       883.831  10/13/2014 10:33   \n",
      "3           434  SEA00333       865.937  10/13/2014 10:34   \n",
      "4           435  SEA00202       923.923  10/13/2014 10:34   \n",
      "...         ...       ...           ...               ...   \n",
      "142841   156796  SEA00358       377.183  10/12/2015 20:41   \n",
      "142842   156797  SEA00399       303.330  10/12/2015 20:43   \n",
      "142843   156798  SEA00204       165.597  10/12/2015 21:03   \n",
      "142844   156799  SEA00073       388.576  10/12/2015 21:35   \n",
      "142845   156800  SEA00033       391.885  10/12/2015 22:45   \n",
      "\n",
      "                      usertype  gender  \n",
      "0                Annual Member    Male  \n",
      "1                Annual Member    Male  \n",
      "2                Annual Member  Female  \n",
      "3                Annual Member  Female  \n",
      "4                Annual Member    Male  \n",
      "...                        ...     ...  \n",
      "142841           Annual Member    Male  \n",
      "142842           Annual Member    Male  \n",
      "142843           Annual Member    Male  \n",
      "142844  Short-Term Pass Holder     NaN  \n",
      "142845           Annual Member    Male  \n",
      "\n",
      "[142846 rows x 6 columns]\n",
      "           Date      Events\n",
      "0    10/13/2014        Rain\n",
      "1    10/14/2014        Rain\n",
      "2    10/15/2014        Rain\n",
      "3    10/16/2014        Rain\n",
      "4    10/17/2014        Rain\n",
      "..          ...         ...\n",
      "361   10/9/2015  Fog , Rain\n",
      "362  10/10/2015        Rain\n",
      "363  10/11/2015         NaN\n",
      "364  10/12/2015        Rain\n",
      "365         NaN         NaN\n",
      "\n",
      "[366 rows x 2 columns]\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "<ipython-input-7-bf36f80775c5>:14: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame.\n",
      "Try using .loc[row_indexer,col_indexer] = value instead\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  df1[\"starttime\"] = df1[\"starttime\"].str.split(\" \").str[0]\n"
     ]
    }
   ],
   "source": [
    "# columns1\n",
    "##################################begin######################################\n",
    "columns1 = [\"trip_id\", \"bikeid\", \"tripduration\", \"starttime\", \"usertype\", \"gender\"]\n",
    "###################################end#######################################\n",
    "df1 = df1[columns1]\n",
    "print(df1)\n",
    "# columns2\n",
    "##################################begin######################################\n",
    "columns2 = [\"Date\", \"Events\"]\n",
    "###################################end#######################################\n",
    "df2 = df2[columns2]\n",
    "print(df2)\n",
    "### 日期字段剔除时间，只具体到天。\n",
    "df1[\"starttime\"] = df1[\"starttime\"].str.split(\" \").str[0]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3、数据合并"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>trip_id</th>\n",
       "      <th>bikeid</th>\n",
       "      <th>tripduration</th>\n",
       "      <th>usertype</th>\n",
       "      <th>gender</th>\n",
       "      <th>Date</th>\n",
       "      <th>Events</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>431</td>\n",
       "      <td>SEA00298</td>\n",
       "      <td>985.935</td>\n",
       "      <td>Annual Member</td>\n",
       "      <td>Male</td>\n",
       "      <td>10/13/2014</td>\n",
       "      <td>Rain</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>432</td>\n",
       "      <td>SEA00195</td>\n",
       "      <td>926.375</td>\n",
       "      <td>Annual Member</td>\n",
       "      <td>Male</td>\n",
       "      <td>10/13/2014</td>\n",
       "      <td>Rain</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>433</td>\n",
       "      <td>SEA00486</td>\n",
       "      <td>883.831</td>\n",
       "      <td>Annual Member</td>\n",
       "      <td>Female</td>\n",
       "      <td>10/13/2014</td>\n",
       "      <td>Rain</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>434</td>\n",
       "      <td>SEA00333</td>\n",
       "      <td>865.937</td>\n",
       "      <td>Annual Member</td>\n",
       "      <td>Female</td>\n",
       "      <td>10/13/2014</td>\n",
       "      <td>Rain</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>435</td>\n",
       "      <td>SEA00202</td>\n",
       "      <td>923.923</td>\n",
       "      <td>Annual Member</td>\n",
       "      <td>Male</td>\n",
       "      <td>10/13/2014</td>\n",
       "      <td>Rain</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>436</td>\n",
       "      <td>SEA00337</td>\n",
       "      <td>808.805</td>\n",
       "      <td>Annual Member</td>\n",
       "      <td>Male</td>\n",
       "      <td>10/13/2014</td>\n",
       "      <td>Rain</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>437</td>\n",
       "      <td>SEA00202</td>\n",
       "      <td>596.715</td>\n",
       "      <td>Annual Member</td>\n",
       "      <td>Male</td>\n",
       "      <td>10/13/2014</td>\n",
       "      <td>Rain</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>438</td>\n",
       "      <td>SEA00311</td>\n",
       "      <td>592.131</td>\n",
       "      <td>Annual Member</td>\n",
       "      <td>Male</td>\n",
       "      <td>10/13/2014</td>\n",
       "      <td>Rain</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>439</td>\n",
       "      <td>SEA00486</td>\n",
       "      <td>586.347</td>\n",
       "      <td>Annual Member</td>\n",
       "      <td>Female</td>\n",
       "      <td>10/13/2014</td>\n",
       "      <td>Rain</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>440</td>\n",
       "      <td>SEA00434</td>\n",
       "      <td>587.634</td>\n",
       "      <td>Annual Member</td>\n",
       "      <td>Male</td>\n",
       "      <td>10/13/2014</td>\n",
       "      <td>Rain</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   trip_id    bikeid  tripduration       usertype  gender        Date Events\n",
       "0      431  SEA00298       985.935  Annual Member    Male  10/13/2014   Rain\n",
       "1      432  SEA00195       926.375  Annual Member    Male  10/13/2014   Rain\n",
       "2      433  SEA00486       883.831  Annual Member  Female  10/13/2014   Rain\n",
       "3      434  SEA00333       865.937  Annual Member  Female  10/13/2014   Rain\n",
       "4      435  SEA00202       923.923  Annual Member    Male  10/13/2014   Rain\n",
       "5      436  SEA00337       808.805  Annual Member    Male  10/13/2014   Rain\n",
       "6      437  SEA00202       596.715  Annual Member    Male  10/13/2014   Rain\n",
       "7      438  SEA00311       592.131  Annual Member    Male  10/13/2014   Rain\n",
       "8      439  SEA00486       586.347  Annual Member  Female  10/13/2014   Rain\n",
       "9      440  SEA00434       587.634  Annual Member    Male  10/13/2014   Rain"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 按日期合并数据赋值给df\n",
    "##################################begin######################################\n",
    "df = pd.merge(df1,df2,\"left\",left_on=\"starttime\",right_on=\"Date\")\n",
    "###################################end#######################################\n",
    "\n",
    "# 将重复列“starttime”剔除\n",
    "##################################begin######################################\n",
    "df = df.drop(columns=[\"starttime\"])\n",
    "###################################end#######################################\n",
    "\n",
    "# 查看前十行数据\n",
    "##################################begin######################################\n",
    "df.head(10)\n",
    "###################################end#######################################"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 把租用时长秒改为分，并保留两位小数\n",
    "df[\"tripduration\"] = df[\"tripduration\"].apply(lambda x: round(x / 60, 2))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 4、数据重命名"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>行程id</th>\n",
       "      <th>共享单车id</th>\n",
       "      <th>时长</th>\n",
       "      <th>用户类别</th>\n",
       "      <th>性别</th>\n",
       "      <th>日期</th>\n",
       "      <th>天气</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>431</td>\n",
       "      <td>SEA00298</td>\n",
       "      <td>16.43</td>\n",
       "      <td>Annual Member</td>\n",
       "      <td>Male</td>\n",
       "      <td>10/13/2014</td>\n",
       "      <td>Rain</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>432</td>\n",
       "      <td>SEA00195</td>\n",
       "      <td>15.44</td>\n",
       "      <td>Annual Member</td>\n",
       "      <td>Male</td>\n",
       "      <td>10/13/2014</td>\n",
       "      <td>Rain</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>433</td>\n",
       "      <td>SEA00486</td>\n",
       "      <td>14.73</td>\n",
       "      <td>Annual Member</td>\n",
       "      <td>Female</td>\n",
       "      <td>10/13/2014</td>\n",
       "      <td>Rain</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>434</td>\n",
       "      <td>SEA00333</td>\n",
       "      <td>14.43</td>\n",
       "      <td>Annual Member</td>\n",
       "      <td>Female</td>\n",
       "      <td>10/13/2014</td>\n",
       "      <td>Rain</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>435</td>\n",
       "      <td>SEA00202</td>\n",
       "      <td>15.40</td>\n",
       "      <td>Annual Member</td>\n",
       "      <td>Male</td>\n",
       "      <td>10/13/2014</td>\n",
       "      <td>Rain</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   行程id    共享单车id     时长           用户类别      性别          日期    天气\n",
       "0   431  SEA00298  16.43  Annual Member    Male  10/13/2014  Rain\n",
       "1   432  SEA00195  15.44  Annual Member    Male  10/13/2014  Rain\n",
       "2   433  SEA00486  14.73  Annual Member  Female  10/13/2014  Rain\n",
       "3   434  SEA00333  14.43  Annual Member  Female  10/13/2014  Rain\n",
       "4   435  SEA00202  15.40  Annual Member    Male  10/13/2014  Rain"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 将合并后的数据表中的“trip_id”、“bikeid”、“tripduration”、“usertype”、“gender”、“Date”、“Events”7个字段分别重命名为\n",
    "# “行程id”、“共享单车id”、“时长”、“用户类别”、“性别”、“日期”、“天气”\n",
    "##################################begin######################################\n",
    "df = df.rename(columns={\"trip_id\":\"行程id\", \"bikeid\":\"共享单车id\", \"tripduration\":\"时长\", \n",
    "                   \"usertype\":\"用户类别\", \"gender\":\"性别\", \"Date\":\"日期\", \"Events\":\"天气\"})\n",
    "###################################end#######################################\n",
    "\n",
    "# 查看前五行数据\n",
    "##################################begin######################################\n",
    "df.head(5)\n",
    "###################################end#######################################"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 5、缺失值处理"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 对“天气”这一列中的缺失值使用“Good”进行填充\n",
    "##################################begin######################################\n",
    "df[\"天气\"] = df[\"天气\"].fillna(\"Good\")\n",
    "###################################end#######################################\n",
    "\n",
    "# 查看列中是否存在空值\n",
    "##################################begin######################################\n",
    "df[\"天气\"].isnull().sum()\n",
    "###################################end#######################################"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 任务三：数据分析与可视化"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1、男女使用共享单车次数的差异"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x576 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 设置画布大小为6*8\n",
    "fig, ax = plt.subplots(figsize=(6,8))\n",
    "# 画条形图，性别为横坐标(忽略性别未知的数据)，使用次数为纵坐标\n",
    "##################################begin######################################\n",
    "count_gender = df[\"性别\"].value_counts()\n",
    "plt.bar(count_gender.index[:-1], count_gender.values[:-1])\n",
    "###################################end#######################################\n",
    "# 标签\n",
    "for i, c in enumerate(df[\"性别\"].value_counts().values[:-1]):\n",
    "    ax.text(i, c-5000,c, horizontalalignment=\"center\",fontdict={\"size\":16})\n",
    "\n",
    "# 设置标题 \n",
    "##################################begin######################################\n",
    "plt.title(\"Differences\")\n",
    "###################################end#######################################\n",
    "plt.xlabel(\"\")\n",
    "plt.ylabel(\"\")\n",
    "ax.yaxis.grid(linewidth=0.5, color=\"#3c7f99\",alpha=0.3)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2、短期卡和年卡用户使用共享单车数量比较"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABKMAAAFKCAYAAADBiZz8AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAACeQ0lEQVR4nOzdd1yVdf/H8dfFBmVvlKEiOFET9wK11NRs2967bFj9urvb9323991ed3vYLjVtuM1MMUcOJDfKHrI31++PC8lB5gAuwPfz8eABnPM953wOIcH7fL6fr2GaJiIiIiIiIiIiIs3Bwe4CRERERERERETkxKEwSkREREREREREmo3CKBERERERERERaTYKo0REREREREREpNkojBIRERERERERkWajMEpERERERERERJqNwigRERFpdQzDCDIM4xXDMHYbhlFuGEayYRh3GYbhbHdtLYVhGDsMwzCb8P4XGoZhGoYR1VSPISIiIm2TwigRERFpVQzD6AysAa4DSoE5gAfwGPCVYRj6/UZERESkBTNMs8leMBMRERFpVHVB00rgJOAF4BbTNE3DMNyA74GRwI2mab5sY5ktgmEYXQBn0zSTm+j+I7BCwK2maVY1xWOIiIhI26QwSkRERFoNwzDOBL4AtgMxpmlW73fdeKwuqbWmafa1p0IRERER+TtqYxcREZHW5Jy695/sH0TVWVb3vnddp5SIiIiItEAKo0RERKQ1GVT3fuXBV5imWQj8CCwB2u273DCMRMMwvjcMo8AwjGLDMJYahnH2/rc1DOPBumHc1xqG8bxhGHvrhqNPNgxjuGEYaw3DKDEMY45hGD51t3mn7janGobxnGEYaYZhVBiGscEwjJsMwzAaegKGYZxeN/w7q279ZsMw7jMMw6WBtZfVPcaDdZ/HG4bxvmEYOw3DePJwX6gjHWBuGMaZhmEsMgwjs+45bjAM45+GYXj8ze2OaIC5YRhdDMN4zzCMjLph8xvqhs27/tVzNQzDwzCMJ+ueZ6lhGOsNw7ji756LiIiItA4Ko0RERKRVqAtrouo+3dXQGtM0TzFNM8E0zdy629wKzAPGAsnAKmAg8JlhGM82cBcPAacDG4EOwJtYW/8Kgb3AeODag27zEjAN2AGsALpgzbN6o4HncCfwFTAEWIcVnnkC/wJeP8zTxzCM64FfgAuxwraaw60/EoZh/ANr2+MQYH1dPe2Bh4FvGuH+RwC/ARcDBcBCIAxr2Py8vwi83IH5wC3AZuB3oCfw1sEhooiIiLROCqNERESktfAG9nUbFf3dYsMwhgJPA2XAKaZpDjJNcxRWd1UmcKthGOcddLMyoA/WIPQyIAh40zTNEcCddWu6HnSbcGCSaZpD69YNBvKBK+vmWO2rxxP4D1aINMQ0zbGmaU6qu78twCWGYQT/xdMZiRVw/Q/oYJpmgGma//i7r8ER+L+69wmmaY4xTfP0unrWAmMNw+h2rHdsGIYXVtDlBdxtmmasaZrjgRjgZ2AY8EwDN70J6Aj0qwsXBwGP1l13cBAoIiIirZDCKBEREWkt9p8DdfC8qIbcjvW7zuOmac7bd6Fpmqv5M4S586DbvG2a5t66eVRZdZft66BKq3vvdNBtPjRNc85+978GeLXu0wv2W+cEnAWMMU3zt/0uL8fqqjKA6L94LonAK6ZpXmuaZvpfrDkWFXXvd++7wDTNSmAcVii14zju+1IgEFhgmuZj+91/NnAZUIUV2PkedDsP4GzTNDfsd9nzde87H0c9IiIi0kIc/MuUiIiISEtVut/HDQ4oNwzjAsAF+BQYXnfx7AaWflf3vt9BW8VSG1jb0GX7m9fAZT/Xve+17wLTNPOBWYZhuBqGkQD0q3sbg7V1DcD5Lx4jDbjrb+o4Fh9ihXbzDcP4AKsjKsk0zVSs7rHj8Zdff9M0txiGkYK1/W4QMHe/qxebprn8oPWZdSO4HI+zJhEREWkBFEaJiIhIa7EXqMQKm0Kw5jod7B2sQGcm4Fd32Z6DF5mmmWMYRgXgCvjsf1UDa/9uCHhDoU1O3XvP/S+sm2H1wH6PmQssxXo+g/hrH5imWXqY64/VP4ES4PK6uvbV+Ttwv2maXx/Hff/l13+/y3vut26fQ4bTi4iISNuibXoiIiLSKpimWYM1ZBsg7uDrDcMIxAqiyrGCq7y6qzo0sDYAK4gy69Yej9AGLguqe1+w32OejrXlrwS4CIiom/10OrDmbx6j7DhrbJBpmpWmaT5gmmYEViB2CvAk1lynzw3DGHwcd/+XX/+DLs876PLi43hMERERaQUURomIiEhrMrPu/bkNXJdY9/63uuBqad3nExtYe2rd+9WN0HE0roHLRta9X7ffZftq/pdpmh/WbYXDsPafHfOg8GNlGEakYRhPGYZxKVhb4UzT/NE0zf/DGhjuCBzP6XV/+fU3DKMLVuBVDfx6HI8hIiIirZDCKBEREWlNXsHqpBliGEb9DCXDMDoBj9R9+k7d+2ewOp/uMgxjzH5r+wFP1H36ZCPUdK5hGCfvd//dgKvrPn1/v3Xt696H7be2PfA6MKoR6jhalcB04FHDMA7u7upS9772OO7/PSAbSDQMo/7kv7oOtnexutjeqpulJSIiIicQhVEiIiLSapimmYnVYVQCPGYYxjrDMOZgdSB1weqceqtu7c9Yw7ndgR8Mw1huGMZCYDkQDDxnmuYnjVDWBmCuYRg/GYYxF1gNeAMvm6a5YL91M+re328Yxvy6tenAlcDOuuuCG6GeI1J3Kt8rWNsMt9bV9KVhGMnAxVhf47eP4/4LsDqrirACr811zzkFGIY15P3243waIiIi0gopjBIREZFWxTTNeUBfrK6jYGA0sAsr2DjDNM3a/dY+C4zFOvGuBzAASALONU3ztkYqaTpWV1Y3rK2CW4EbTNO88aC6PwSmYg3oHggMxgpkxmJ1cYEVAjWnaVhdXKuAk4BJWCcVvgPEm6a56Xju3DTNxXX3+wHgi/X1SQf+AYwxTbPkeO5fREREWifj7w+IEREREZGDGYbxDnApkGia5kJ7qxERERFpPdQZJSIiIiIiIiIizUZhlIiIiIiIiIiINBtt0xMRERERERERkWajzigREREREREREWk2CqNERERERERERKTZONldgN0CAgLMqKgou8sQEREREREREWkzVq1alWOaZmBD153wYVRUVBRJSUl2lyEiIiIiIiIi0mYYhrHzr67TNj0REREREREREWk2CqNERERERERERKTZKIwSEREREREREZFmozBKRERERERERESajcIoERERERERERFpNgqjRERERERERESk2Rx1GGUYxvWGYZh/cV1PwzBmG4ax1zCMDMMwHjIM45DHsGudiIiIiIiIiIjYy+loFhuGcS7w4l9cFwMsxgq4ngJcgbvqHuMeu9eJiIiIiIiIiIj9jiiMqusy+jdWyJMBhDWw7GnACxhomubqutulAS8YhvGmaZrbbV533CoqKsjLy6OoqIiamprGulsRkb/l6OiIp6cnfn5+uLq62l2OiIiIiIjIMTNMs8EddwcuMow+wE/AFcBZwKWmaRr7Xe8F5AKzTNM8Y7/LXeouf8A0zWfsWne45xYfH28m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c4OOyHcqRsWhYpSIT3ZtgiVPwYLZsHEpFJbCkLPcbnwDx0NBYWbara9LsijU5HijolCiolGT43VJbdYZg4Hi1m7aXHFrKCqFotZQ3Mrdt/f+hn+3inFuaze/vMdwNwpKi4yLiIiIiLQstVUw62w322HGK9B7TNAR+UrFqDhUjBLxmbXuxXTh4644tedbaN8bRl0A/cZ5RaEUCkH7FZianFtfm36sBUWuqFNUGlEgaloUalIAanRuGscLi/N2TriIiIiIiKRo1ya4/yS3WdSlb0GHXkFH5BsVo+JQMUokg2qr4PO5brTUF6/HnmYGUFgSZYRQqxijhnwqEGnRdRERERERCdr6T+Ch06DrILjk5bzZYU/FqDhUjBLJkl0bYdvq2NPRNM1MRERERETC6rNXYM5Ut3bU5IfyYjZFvGKUhgWISHa06+5uIiIiIiIi0tihZ8CEG+GNG9wu5YMmBB1RRqkYJSIiIiIiIiIStO/8J/QZCwcdH3QkGad5MSIiIiIiIiIiQTMmFIUoUDFKRERERERERESySMUoERERERERERHJGhWjREREREREREQka1SMEhERERERERGRrFExSkREREREREREskbFKBERERERERERyRoVo0REREREREREJGtUjBIRERERERERkaxRMUpERERERERERLJGxSgREREREREREckaY60NOoZAGWM2AV8FHYdPugKbgw4ijyif/lNO/aec+kv59J9y6i/l03/Kqb+UT/8pp/5SPv2nnPorn/J5oLW2W7QDoS9G5RNjTLm1tizoOPKF8uk/5dR/yqm/lE//Kaf+Uj79p5z6S/n0n3LqL+XTf8qpv8KST03TExERERERERGRrFExSkREREREREREskbFqPxyX9AB5Bnl03/Kqf+UU38pn/5TTv2lfPpPOfWX8uk/5dRfyqf/lFN/hSKfWjNKRERERERERESyRiOjREREREREREQka4qCDkBERETEL8aYAbi/b1ZZa+sCDkdEREREotDIKJ8YY2YYY5YaY6qNMVXGmHeMMaOanDPMGPOSMWabMWa9MeYmY0zM74Ex5nJjTFLzKI0xhcaYD4wxbzezKwnbTbUfzYgjNDlNJ7404whNTpPpqw8xZDWfxphiY8weY4yNcjs9zT5k7PudZjyhyamu0aT7kGw+JxpjVgOrgBXARmPMv6fTZoJ4QpPTJo/x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\n",
      "text/plain": [
       "<Figure size 1440x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 设置画布大小为10*5\n",
    "fig, ax = plt.subplots(figsize=(20,5))\n",
    "# 确保日期列是datetime类型\n",
    "df['日期'] = pd.to_datetime(df['日期'])\n",
    "\n",
    "# 按照用户类型筛选类型为\"Annual Member\"和\"Short-Term Pass Holder\"的数据，\n",
    "a = df.loc[df[\"用户类别\"] == \"Annual Member\", [\"用户类别\", \"日期\"]][\"日期\"]\n",
    "b = df.loc[df[\"用户类别\"] == \"Short-Term Pass Holder\", [\"用户类别\", \"日期\"]][\"日期\"]\n",
    "\n",
    "# 按月统计两种用户类型租用共享单车的次数\n",
    "##################################begin######################################\n",
    "count1 = a.dt.to_period(\"M\").value_counts().sort_index()\n",
    "count2 = b.dt.to_period(\"M\").value_counts().sort_index()\n",
    "###################################end#######################################\n",
    "\n",
    "# 绘制\"Annual Member\"和\"Short-Term Pass Holder\"两条曲线，时间作为横坐标(月)，订单数量作为纵坐标。\n",
    "##################################begin######################################\n",
    "plt.plot(count1.index.astype(dtype=str), count1.values, label=\"Annual Member\")\n",
    "plt.plot(count1.index.astype(dtype=str), count2.values, label=\"Short-Term Pass Holder\")\n",
    "###################################end#######################################\n",
    "\n",
    "plt.legend()\n",
    "plt.title(\"Comparision\")\n",
    "plt.xlabel(\"\")\n",
    "plt.ylabel(\"\")\n",
    "ax.yaxis.grid(linewidth=0.5, color=\"#3c7f99\",alpha=0.3)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Index(['2014-10', '2014-11', '2014-12', '2015-01', '2015-02', '2015-03',\n",
       "       '2015-04', '2015-05', '2015-06', '2015-07', '2015-08', '2015-09',\n",
       "       '2015-10'],\n",
       "      dtype='object')"
      ]
     },
     "execution_count": 56,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "count1.index.astype(dtype=str)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3、统计使用次数最少的自行车"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "使用次数最少的单车是SEA00012, 次数是1\n"
     ]
    }
   ],
   "source": [
    "\n",
    "#将被骑得次数最少的共享单车id及次数进行打印\n",
    "##################################begin######################################\n",
    "count_id = df[\"共享单车id\"].value_counts().sort_values()\n",
    "print(f\"使用次数最少的单车是{count_id.index[0]}, 次数是{count_id[0]}\")\n",
    "###################################end#######################################"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 4、统计各种天气中，骑行时长的平均值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "天气\n",
       "Fog                    16.276245\n",
       "Fog , Rain             12.364129\n",
       "Good                   21.684263\n",
       "Rain                   17.428162\n",
       "Rain , Snow            13.898889\n",
       "Rain , Thunderstorm    21.042229\n",
       "Name: 时长, dtype: float64"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 使用数据表df中的“天气”作为分组对象，统计“时长”的平均值，将结果进行打印\n",
    "##################################begin######################################\n",
    "df.groupby(\"天气\")[\"时长\"].mean()\n",
    "###################################end#######################################"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 任务四：机器学习"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.linear_model import LinearRegression\n",
    "from sklearn.metrics import mean_squared_error, r2_score\n",
    "from sklearn.preprocessing import OneHotEncoder, LabelEncoder"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>行程id</th>\n",
       "      <th>共享单车id</th>\n",
       "      <th>时长</th>\n",
       "      <th>用户类别</th>\n",
       "      <th>性别</th>\n",
       "      <th>日期</th>\n",
       "      <th>天气</th>\n",
       "      <th>date</th>\n",
       "      <th>year</th>\n",
       "      <th>month</th>\n",
       "      <th>day</th>\n",
       "      <th>weekday</th>\n",
       "      <th>is_weekend</th>\n",
       "      <th>weather_encoded</th>\n",
       "      <th>user_category_encoded</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>431</td>\n",
       "      <td>SEA00298</td>\n",
       "      <td>16.43</td>\n",
       "      <td>Annual Member</td>\n",
       "      <td>Male</td>\n",
       "      <td>2014-10-13</td>\n",
       "      <td>Rain</td>\n",
       "      <td>2014-10-13</td>\n",
       "      <td>2014</td>\n",
       "      <td>10</td>\n",
       "      <td>13</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>432</td>\n",
       "      <td>SEA00195</td>\n",
       "      <td>15.44</td>\n",
       "      <td>Annual Member</td>\n",
       "      <td>Male</td>\n",
       "      <td>2014-10-13</td>\n",
       "      <td>Rain</td>\n",
       "      <td>2014-10-13</td>\n",
       "      <td>2014</td>\n",
       "      <td>10</td>\n",
       "      <td>13</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>433</td>\n",
       "      <td>SEA00486</td>\n",
       "      <td>14.73</td>\n",
       "      <td>Annual Member</td>\n",
       "      <td>Female</td>\n",
       "      <td>2014-10-13</td>\n",
       "      <td>Rain</td>\n",
       "      <td>2014-10-13</td>\n",
       "      <td>2014</td>\n",
       "      <td>10</td>\n",
       "      <td>13</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>434</td>\n",
       "      <td>SEA00333</td>\n",
       "      <td>14.43</td>\n",
       "      <td>Annual Member</td>\n",
       "      <td>Female</td>\n",
       "      <td>2014-10-13</td>\n",
       "      <td>Rain</td>\n",
       "      <td>2014-10-13</td>\n",
       "      <td>2014</td>\n",
       "      <td>10</td>\n",
       "      <td>13</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>435</td>\n",
       "      <td>SEA00202</td>\n",
       "      <td>15.40</td>\n",
       "      <td>Annual Member</td>\n",
       "      <td>Male</td>\n",
       "      <td>2014-10-13</td>\n",
       "      <td>Rain</td>\n",
       "      <td>2014-10-13</td>\n",
       "      <td>2014</td>\n",
       "      <td>10</td>\n",
       "      <td>13</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>142841</th>\n",
       "      <td>156796</td>\n",
       "      <td>SEA00358</td>\n",
       "      <td>6.29</td>\n",
       "      <td>Annual Member</td>\n",
       "      <td>Male</td>\n",
       "      <td>2015-10-12</td>\n",
       "      <td>Rain</td>\n",
       "      <td>2015-10-12</td>\n",
       "      <td>2015</td>\n",
       "      <td>10</td>\n",
       "      <td>12</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>142842</th>\n",
       "      <td>156797</td>\n",
       "      <td>SEA00399</td>\n",
       "      <td>5.06</td>\n",
       "      <td>Annual Member</td>\n",
       "      <td>Male</td>\n",
       "      <td>2015-10-12</td>\n",
       "      <td>Rain</td>\n",
       "      <td>2015-10-12</td>\n",
       "      <td>2015</td>\n",
       "      <td>10</td>\n",
       "      <td>12</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>142843</th>\n",
       "      <td>156798</td>\n",
       "      <td>SEA00204</td>\n",
       "      <td>2.76</td>\n",
       "      <td>Annual Member</td>\n",
       "      <td>Male</td>\n",
       "      <td>2015-10-12</td>\n",
       "      <td>Rain</td>\n",
       "      <td>2015-10-12</td>\n",
       "      <td>2015</td>\n",
       "      <td>10</td>\n",
       "      <td>12</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>142844</th>\n",
       "      <td>156799</td>\n",
       "      <td>SEA00073</td>\n",
       "      <td>6.48</td>\n",
       "      <td>Short-Term Pass Holder</td>\n",
       "      <td>NaN</td>\n",
       "      <td>2015-10-12</td>\n",
       "      <td>Rain</td>\n",
       "      <td>2015-10-12</td>\n",
       "      <td>2015</td>\n",
       "      <td>10</td>\n",
       "      <td>12</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>142845</th>\n",
       "      <td>156800</td>\n",
       "      <td>SEA00033</td>\n",
       "      <td>6.53</td>\n",
       "      <td>Annual Member</td>\n",
       "      <td>Male</td>\n",
       "      <td>2015-10-12</td>\n",
       "      <td>Rain</td>\n",
       "      <td>2015-10-12</td>\n",
       "      <td>2015</td>\n",
       "      <td>10</td>\n",
       "      <td>12</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>142846 rows × 15 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "          行程id    共享单车id     时长                    用户类别      性别         日期  \\\n",
       "0          431  SEA00298  16.43           Annual Member    Male 2014-10-13   \n",
       "1          432  SEA00195  15.44           Annual Member    Male 2014-10-13   \n",
       "2          433  SEA00486  14.73           Annual Member  Female 2014-10-13   \n",
       "3          434  SEA00333  14.43           Annual Member  Female 2014-10-13   \n",
       "4          435  SEA00202  15.40           Annual Member    Male 2014-10-13   \n",
       "...        ...       ...    ...                     ...     ...        ...   \n",
       "142841  156796  SEA00358   6.29           Annual Member    Male 2015-10-12   \n",
       "142842  156797  SEA00399   5.06           Annual Member    Male 2015-10-12   \n",
       "142843  156798  SEA00204   2.76           Annual Member    Male 2015-10-12   \n",
       "142844  156799  SEA00073   6.48  Short-Term Pass Holder     NaN 2015-10-12   \n",
       "142845  156800  SEA00033   6.53           Annual Member    Male 2015-10-12   \n",
       "\n",
       "          天气       date  year  month  day  weekday  is_weekend  \\\n",
       "0       Rain 2014-10-13  2014     10   13        0           0   \n",
       "1       Rain 2014-10-13  2014     10   13        0           0   \n",
       "2       Rain 2014-10-13  2014     10   13        0           0   \n",
       "3       Rain 2014-10-13  2014     10   13        0           0   \n",
       "4       Rain 2014-10-13  2014     10   13        0           0   \n",
       "...      ...        ...   ...    ...  ...      ...         ...   \n",
       "142841  Rain 2015-10-12  2015     10   12        0           0   \n",
       "142842  Rain 2015-10-12  2015     10   12        0           0   \n",
       "142843  Rain 2015-10-12  2015     10   12        0           0   \n",
       "142844  Rain 2015-10-12  2015     10   12        0           0   \n",
       "142845  Rain 2015-10-12  2015     10   12        0           0   \n",
       "\n",
       "        weather_encoded  user_category_encoded  \n",
       "0                     3                      0  \n",
       "1                     3                      0  \n",
       "2                     3                      0  \n",
       "3                     3                      0  \n",
       "4                     3                      0  \n",
       "...                 ...                    ...  \n",
       "142841                3                      0  \n",
       "142842                3                      0  \n",
       "142843                3                      0  \n",
       "142844                3                      1  \n",
       "142845                3                      0  \n",
       "\n",
       "[142846 rows x 15 columns]"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 日期特征\n",
    "df['date'] = pd.to_datetime(df['日期'])\n",
    "df['year'] = df['date'].dt.year\n",
    "df['month'] = df['date'].dt.month\n",
    "df['day'] = df['date'].dt.day\n",
    "df['weekday'] = df['date'].dt.weekday\n",
    "df['is_weekend'] = (df['weekday'] >= 5).astype(int)\n",
    "\n",
    "# 用户类别编码\n",
    "le = LabelEncoder()\n",
    "df['weather_encoded'] = le.fit_transform(df['天气'])\n",
    "df['user_category_encoded'] = le.fit_transform(df['用户类别'])\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "MSE: 997.5679677159806\n",
      "RMSE: 31.58429938618206\n",
      "R^2: 0.13744020091991105\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjYAAAD9CAYAAACvBj1rAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAAAm4klEQVR4nO3de/xVVZ3/8dcbMGS6eANvKaKpqWhqfi3TvNFYJM5oOWlTOXj5ReJoWf3yUl5rNMd0LLFRUUecsZz65aW4BF4KSgX0iwZaJt5QVEQwgRKUwM/vj7VObA/ny/ec7+343byfjweP891rr7322md/9bxZa+2DIgIzMzOzMujT7A6YmZmZdRUHGzMzMysNBxszMzMrDQcbMzMzKw0HGzMzMyuNfs3ugNn6buDAgTFkyJBmd8PMrFeZNWvW4ogYVF3uYGPWZEOGDKG1tbXZ3TAz61UkPVur3FNRZmZmVhoONmZmZlYaDjZmZmZWGg42ZmZmVhoONmZmZlYaDjZmZmZWGn7c26xkhpw1sdldMDNr17xLRnRLux6xMTMzs9JwsLH1nqQLJIWkIW/H9szMrH4ONp0g6XhJpze7H2ZmZpY42HTO8cDpTe6DmZmZZQ42ZmZmVhrtBhtJ8yRNrVH+u2K5pOGS7pX0qqQlkqZK+miN4w6QdKekZZIWS5okaY8a9ULSOEl9JX1V0mxJ9zd+iX9rb19JkyX9OZ/3Lkn716j34Vxvcb6OeyUNK+w/PvctgIOB7Srbuay6vaGSbpP0J0lLJU2TdGCNeodLelDSa5KelPRlSf8l6S+Sji/U217SLfl9Xi7pnjauY6qkefnnf5D063zMRrlMkp6Q9Mcax16Sr2f3et/fwrHbSrpJ0sLc9wckHVVVZ1xu/x2SvidpQf59mCBp66q6W+X34eXc3kOSRtY47zslXSppvqQ3JM1po957Jf00/x68IukKYIMa9QZIukjS05Jel/SYpLMkbdCR9szMrGd0yePekvYFJgC/A74FBGmaZrKkXSNifq53OPBz4H7gTGAAcDIwQ1JLRDxW1XSfXP8gYCKw1odwnf0bBvwSeAn4NrAyn3eapL+PiGm53m7APcCLud4q4ARggqQ9IuIp4DfAcbnpbwEDga+2cd69gd8CTwIXAKtze1PzeX9dqPdz4AHS1NauwA/yNY8iva9I2hGYTvrg/AGwDBid2zsqIibV6MOZwEXAncBt+dqJiJB0PXCJpP0j4v5cvw/weeC+iHi0rjd4zbm2BR4EXgMuy/37DHC7pOMj4qaqQ34E7EB6rz8MjASuBo7M7W0FzAQ2A64CngI+DYyT9N6IuDjX25B03/YFbgBmA0fnejtHxLdyvXcB04DtgCuB50i/B9Vhqh/p92Wfwnn3Bb4L7Ayc2Eh7ZmbWc7rqe2wOAvoCJ0XEbABJk0nhZSAwX5KAMcCjpA+7N/Ox00lB5xTgtKp2j871t4uIVzvRv2tIH7b7RsTLuX/jSR9Yo0kfTgB7AHcD51Q+1JVGpX4PfAL4z4h4Gng67/s/wICIuLmN815O+nD/B2BFLvsl8Afga8Cvc9khpHtxckQ8kts+BNg+In5caO8HwCb5Oh7O9f4rt3edpCER8ddC/S2BrwMfjIg5Nfp3I/Ad0gd1ZTTsY8A2wDfbuKZ1uRB4DzAMeDmX3QE8DPxfoDrY7AR8JCJWAFcrjdwNK+y/ENgW+HhE3AUg6QbSffsycHGudxopGH05Isbkev8JTALOlnRLvp8nAO8DvhYRV+R6t5CCZ9HnSKNxxwGTC9cxCBgp6az8e1Rve2uRNIoUWhk8eHB71c3MrE5dtcbmPtIozXcljZC0dUQ8ExEnVz6ASR9iOwB7AQuBRflP5QN1zzb6d0xnQo2knfK5b62EGoAcUPqRPsQqZT+JiKOA5yQdJuks4L/z7s0bPO8AUuDbivQ3+cr1PgX0563Xey9pNOdf8lTO35NGBp4otLch8HFgWuE9Jb8340ijBPtWdaM/cFoboYb8ftwBHCPpnbl4JPAq8P8aud5sOGkU7vesud6XSO/B0DwSUnRODjUVvwfeVdgeATxZCTW5z6tJv0fvLdT7R9JI1NWFegF8H1DeD1CZAvxxod7LwC9qXAfA/xSuYxHwKdLvZGWKrt721hIRYyOiJSJaBg0a1F51MzOrU2dGbN4DLAGIiBmSPk+akrkD6CfpGeCHEXF5rl/5v/c40hREtWU1ysZHxLOd6COsCSQvVO/IH5J/k9d3XE36QF0FPEaaHtqnA+fdlDSK9UvgP2rsL46sPEKaZvsyaWQDYFbertiMdL/m12jrufy6ZVX5y8BP2+nnWNII2mck3Ur68B4bEa+3c1wtg0ijM2e0sb96DdKMqu03q7Y3J4XmtzYSUV1vS2BBRKyqKq9+XzbN53i5qt7zVduDcr1PVJ87qwTFetszM7Me0qFgI+k9pHUFlQ8OIuIW4BZJ7wCGkj6UL5O0ME/VLM5VV0TE3VXt7dXGqZZ3pH9VFuXX91bvkHQ+sEVEnJKLbgQ+SlrjcVdErJQ0kDxl0KBXSaMw1LjeXYF3F4ouIQW7QaTRgFeAuXnUoeJPpLC1TY1zVcoWVpWvqGqjlntIUycnkkYj/o4UdjpiMbBhjevdgRRS+pLfE4CIWMy6LaL2fTsW+CRwXkQ8R7ruFkl9q8Jq9fuylHSNm5Le44otalxHH2BOcZQv/y7sWKhXb3tmZtZD6pmK+gtrL4Y8s3hsfsplrqR+EbEyT5VUFtR+KL/OBZ4Bjqo8mZOP3Zq04PTcDl7DOkXEXNKUztGS/jadJGkT0jqXDxaq7w88HBETI2JlLltXqFkMvDuvH6o+73LSwuFDJP1tEUWe8plGYdqEND23PCKWRcT9EfF4dSDJUzZ3AwdL+kChvY1IC7VfIr2PDcnnuZ40rXIW8Jsai7jrNRnYNS8mr/SvL2lh9C9IwawRE4Ed89Rc0b8C/0weMQTGk6bdvlQ4r4CvkEaJxufi6fn1mEK9TciLlauuA9K0XNG3cxtbNdiemZn1kHpGbH4NnCrpK6R1F8eQFk0uKNSZRvoQmCLpNtI0y7GF4ytP4ZxK+pCbJWksaUHtaNL6iIs6fzltGk1aSPqgpKvy+U4kjU6cU6g3G9hP0oWkoPCPpMW0kNaOVBtPWuB8vaTfkj7w3h0RlYW3XyOFm8p5FwP/QppWOqHQzm+AcyXdRPqwXAr8mTRqM7dQ73TSmqRpkopPRW0OfLoQxhpVWUS8E+nprY46jzSS8itJY4B5wFGkUajRNaaQ6mlvOPDzQnufJIWwCyOiMn15JfBPwJgc+uaQ7ssw4NLCGqMbSCOJ31f65w6eJ4Wh6nv7I9Lvx7/nJ+Wmk9ZEfQn4SWWBdwPtmZlZD6lnxOYc0uLI80lrToaRFsUWF+LeSHpEeEPS32qvID29MzIibi/UmwQcShq5OZf01MuzwEER8VAXXE9NEXEPaYrpj/k6ziE90r1f1bTJ50mjBF8BLiX9bf8AUoD4ZB59KLZ7E2lNzMHAdaQnkN4o7H8Y2I8URr4O/Dsp9H08Ior/BPMtpCDz96THpH9MCk2PS/pFob3HSSNgd5JCzr+RPkwPjYjxdFCebplGmk65tRPtzM/9ux34Iun3YBBwbERc04H2FuT2fgqcBHyPFB4/GxEXFOqtIP1eXUF6Au37pLB3UkScWaj3Kmu+OuBfSWFuBikYFc+7ihSovkt6Ym0McBjpd3Zko+2ZmVnPUftLMKw75fVKC4GppIXXlaeENiI9brwXMLAwOtGV5x5IGpl4g/Qh/oOIOLurz2Pr1tLSEq2trV3W3pCzJrZfycysyeZdMqJTx0uaFREt1eVd9T02PU5S9RNAtayqY4FqU0XEMklnkELMJaSnzf5KGhF7ADirO0JNtgFwNml9ynjSaNtbSNoUeEcdbb3cgakm6wad/Z+FmVlv1muDDW9d49OWx4FdursjnZW/VG5ME867gDRluC63kaba2rMVaV2SmZlZ0/TmYHNYHXVe6/ZelN/XaT/8QHoc3czMrKl6bbCp/q4U6x4RMavZfTAzM6tXV/2TCmZmZmZN52BjZmZmpeFgY2ZmZqXhYGNmZmal4WBjZmZmpeFgY2ZmZqXhYGNmZmal4WBjZmZmpeFgY2ZmZqXhYGNmZmal4WBjZmZmpdFr/60oM6ttyFkTm92FLjPvkhHN7oKZ9TIesTEzM7PScLAxMzOz0nCwWU9ICknjmt2P7iRpnqSpze5HxfrwnpuZvd14jc364zjgqWZ3wszMrDs52KwnIuLmZvfBzMysu3kqyszMzErDwWY90d56D0nDJd0r6VVJSyRNlfTRDpxntqTW/PM2+bwP5O3Befv8Qv0DJN0paZmkxZImSdqjRrt11as65t2Spuf6ezbaXmXNjqStJd0qaamkhZKulLRBVd0TJT0u6XVJsyR9pNH3zszMOs/BxpC0LzAB2BD4FnA2MACYLGnbBpubAewqqQ/wgVy2e97eLW/PzOc9HJgK9AfOBC4GdgRmSNq10L+66lVd0zuBicBOwMciYnYH29sYmAa8CZwBzAVOA04ttDcauAFYluvMBH65rjdJ0ihJrZJaFy1atK6qZmbWAK+xMYCDgL7ASZUAIGky6UN/IDC/gbZmAKOAIaRgMxE4jBQwhgIBzJQkYAzwKPAZUnAAmA7cD5wCnFZvvWIHJA0AfkEKUtWhptH29gTGRsSX8vE/A14CPgZcIakvcGEuOzgilud6y0jvX00RMRYYC9DS0hJt1TMzs8Y42BjAfaTA8V1JPwQejohngJM70NbM/DqUFGxagW3zz0OBJyLiVUk7AzvkugtrtFOZOtqpznoV/YHbgWHAI6QAU9Roe28A36xsRMQrkhYA78pF7wcGAddUQk12PesINmZm1j0cbIyImCHp88BXgTuAfpKeAX4YEZc32NxjwFLWBJufAe9jTbCZkesNyq/jgB/VaGdZg/Uq9gNeJU0VXUUaffl+YX+j7T0ZEa9Ulb1Z+HnT/Lqgqs7zNdo2M7Nu5mBjAETELcAtkt5BCiBfBi6TtLCRR8UjIiQ9CHyQNJoxhxRsDiRNDd2Uqy7Orysi4u5iG5L2KmzWW69iCWn66WFJBwAXSvpJRFSCR6PtLa5RVrQ0vw6qKt+inePMzKwbePGwIWmcpLmS+kXEyoh4mDR6A/ChDjQ5AziaNI3zFCncjCBN31RGbOYCzwBHSdqo0JetgQeBcxusVzE79x/SVFA/4LLC/kbba89jpDB1pKT+hfITGmzHzMy6gEdsDNJTPyOBKZJuA/4KHJv3/boD7c0kheZH8wjOnLy9ghRyKiM7pwI/B2ZJGpv3jwZWAhc1Uq+WiJgv6XvA+ZKui4ipnWmvjXOsknQR8D1gqqQfk9bxnNRIO2Zm1jU8YmNExI3A50mPe38buALYBBgZEbd3oMnKqEwlxCwAFgGzImJV4byTgENJIyjnkp4uehY4KCIearReGy4lrXf5YeW7ZzrZ3loi4jLS01SDgMtJC5c/1Wg7ZmbWeYrwk6ZmzdTS0hKtra3N7oaZWa8iaVZEtFSXeyrK6iJpyzqqrYqI9hbbmpmZdRsHG6tX9ePMtTwO7NLdHTEzM2uLg43V67A66rzW7b0wMzNbBwcbq0v1d76YmZm9HfmpKDMzMysNBxszMzMrDQcbMzMzKw0HGzMzMysNBxszMzMrDQcbMzMzKw0HGzMzMysNBxszMzMrDQcbMzMzKw0HGzMzMysN/5MKZiUz5KyJddWbd8mIbu6JmVnP84iNmZmZlYaDjZmZmZWGg42ZmZmVhoONmZmZlYaDjZmZmZWGg42VgqTtJK2WdE2NfTMkLZDUL28fIOlOScskLZY0SdIeNY4bLum3kpbkelMk7V2jXkgaJ6mvpK9Kmi3p/u65UjMzWxcHGyuFiHgWuBP4rKQBlXJJOwMfBm6IiFWSDgemAv2BM4GLgR2BGZJ2LRw3DJgADADOBr4D7ABMlrRxjS70AX4OXAj8AZjSxZdoZmZ18PfYWJlcCwwHjgZuzmUjgTeB6yUJGAM8CnwmlwNMB+4HTgFOy2VDgfHAyRGxEEDSE8BEYH9gUtW5j87tbhcRr7bXUUmjgFEAgwcPbvQ6zcysDQ42ViYTgBeBE4GbJfUBjgOmRMS8PHqzQ667sMbxe1Z+iIgxwBhJAyWNAFqAz+Xdm9c4tg9wTD2hJrc/FhgL0NLSEvUcY2Zm7XOwsdLIU003At+UtD0pxGzLmlGYQfl1HPCjGk0sq/wgaRfSCNCBwArgEeABYOc2Tj8+T4eZmVkTOdhY2VxHWhNzAjAEeIE0kgOwOL+uiIi7iwdJ2quqnTuAjYCDgOkRsVpSC/CFNs67vLMdNzOzzvPiYSuVwiLik4BPkxYNr8675wLPAEdJ2qhyjKStgQeBc/P2ZsD7gXsi4t4cagR8seeuxMzMOsIjNlZG1wK3kxcNVwojIiSdSnp6aZaksaRpptHASuCiXO8VSc8DR0r6Rt53LGmdDaQnpczM7G3IIzZWRhNIgWVSRMwv7oiIScChpJGbc0mPZz8LHBQRDxWqHkFaU3MecD4wHxgGrM77zMzsbcgjNlYakvYD9iZ9L80A4Kpa9SLiXuCwdbUVEbOBj9XYtdZ/MxGhhjtrZmbdwsHGymRL4ArgNeCciFgvvyRv3iUjmt0FM7OmcbCx0oiIO4ANm90PMzNrHq+xMTMzs9JwsDEzM7PScLAxMzOz0nCwMTMzs9JwsDEzM7PScLAxMzOz0nCwMTMzs9JwsDEzM7PScLAxMzOz0nCwMTMzs9JwsDEzM7PScLAxMzOz0nCwMTMzs9JwsDErmSFnTWx2F8zMmsbBxszMzErDwcYskxSSxjW7H2Zm1nEONmZmZlYaDjZmZmZWGg42ZmZmVhoONrZeknSipMclvS5plqSP1KgzXNJvJS2RtFjSFEl7F/ZvJ2m1pGtqHDtD0gJJ/br7WszMbA0HG1vvSBoN3AAsA84AZgK/rKozDJgADADOBr4D7ABMlrQxQEQ8C9wJfFbSgMKxOwMfBm6IiFXdfT1mZraG/zZp6xVJfYELgZeAgyNieS5fBpxZqDoUGA+cHBELc50ngInA/sCkXO9aYDhwNHBzLhsJvAlcv45+jAJGAQwePLgrLs3MzPCIja1/3g8MAu6ohJrsLSEkIsZExKeA1ZJGSDofuCLv3rxQdQLwInAigKQ+wHHAlIiY11YnImJsRLRERMugQYM6e01mZpY52Nj6ZtP8uqCq/PnihqRdJE0DXgZ+CnwSeKC6sTzVdCNwiKTtgUOBbUkjOWZm1sMcbGx9szS/Vg+TbFG1fQewM3AQ8J6I2A/4QRttXgcEcAJpGuoF0kiOmZn1MAcbW988BiwBjpTUv1B+QuUHSZuRpqzuiYh7I2K1JAFfrNVgYRHxScCnSYuGV3dT/83MbB28eNjWKxGxStJFwPeAqZJ+DOxECiWVOq9Iep4Ufr4BrASOBVpylQGs7VrgdtpZNGxmZt3LIza23omIy4BTSNNRlwPDgE9VVTuCtKbmPOB8YH6utzrvqzYBWAFMioj53dNzMzNrj0dsbL0UEVcDV1cVq7B/NvCxGoe+5b8ZSfsBewM7kkZyruranpqZWSMcbMw6Z0vSY+CvAedExJQm94d5l4xodhfMzJrGwcasEyLiDmDDZvfDzMwSr7ExMzOz0nCwMTMzs9JwsDEzM7PScLAxMzOz0nCwMTMzs9JwsDEzM7PScLAxMzOz0nCwMTMzs9JwsDEzM7PScLAxMzOz0nCwMTMzs9JwsDEzM7PScLAxMzOz0nCwMTMzs9JwsDEzM7PScLCxUpA0T9LUThwfksZ1XY/MzKwZHGzMzMysNBxszMzMrDQcbMzMzKw0HGysS0maLak1/7xNXrvyQN4enLfPz9sHSLpT0jJJiyVNkrRHjTbrqld1zLslTc/196zad6KkxyW9LmmWpI+00cZwSb+VtCS3M0XS3oX920laLemaGsfOkLRAUr963jczM+saDjbW1WYAu0rqA3wgl+2et3fL2zMlHQ5MBfoDZwIXAzsCMyTtWmms3npFkt4JTAR2Aj4WEbML+0YDNwDLgDOAmcAva7QxDJgADADOBr4D7ABMlrQxQEQ8C9wJfFbSgMKxOwMfBm6IiFXtvWFmZtZ1/LdJ62ozgFHAEFKwmQgcRgoZQ4EghYlW4FHgM8Cb+djpwP3AKcBpkgSMaa9e8eQ5YPyCFKKqQ01f4ELgJeDgiFiey5eRQlPRUGA8cHJELMz1nsjXsz8wKde7FhgOHA3cnMtG5r5e39abJGlUfp8YPHhwW9XMzKxBDjbW1Wbm16GkYNMKbJt/Hgo8AQwijX4ALKzRRmXqaKc661X0B24HhgGPkAJR0fvzua+phJrseqqCTUSMAcZIGihpBNACfC7v3rxQdQLwInAicHMemToOmBIR82r0udL+WGAsQEtLS7RVz8zMGuNgY13tMWApa4LNz4D3sSbYzCCFC4BxwI9qtLEsv9Zbr2I/4FXgVOAq0mjO9wv7N82vC6qOe766YUm7kEZjDgRWkILSA8DOxXoRsUrSjcA3JW1PCmLbUjWSZGZmPcPBxrpURISkB4EPkkZI5pCCzYGk6aGbgMW5+oqIuLt4vKS9Cpv11qtYQpp+eljSAcCFkn4SEZUgszS/Dqo6bosabd0BbAQcBEyPiNWSWoAv1Kh7HWkdzgmkKbgXSCM5ZmbWw7x42LrDDNKakzeAp0jhZgTwrrxvLvAMcJSkjSoHSdoaeBA4NxfVW69idkQ8nH8+kxTcLyvsf4wUfo6U1L9QfkKxEUmbkULZPRFxbw41Ar5Y62ILi4hPAj5NWjS8uuY7Y2Zm3crBxrrDTNLv1qMREaRg04c0pTMnl51KGjmZJekMSacBdwMrgYsgjf7UU6+WiJgPfA/4nKRDctmqfMy2wFRJp0m6EvhG1bGvkKanjpT0DUlfAe5jTQAawNquBbbO+9pcNGxmZt3Lwca6w4z8OgcgTwUtAmZVHn+OiEnAoaQRmXNJTys9CxwUEQ9VGqq3XhsuJQWUH0raILd3GelpqkHA5aSFxp+qcewRpDU15wHnA/Nz3dV5X7UJpOA2KYcqMzNrAqW/FJtZR0jaD9ib9N06XwOGR8SURtpoaWmJ1tbW7uiemVlpSZoVES3V5V48bNY5WwJXAK8B5zQaaszMrGs52Jh1QkTcAWzY7H6YmVniNTZmZmZWGg42ZmZmVhoONmZmZlYaDjZmZmZWGg42ZmZmVhoONmZmZlYaDjZmZmZWGg42ZmZmVhoONmZmZlYaDjZmZmZWGg42ZmZmVhoONmZmZlYaDjZmZmZWGg42ZmZmVhoONmZmZlYaDjZmZmZWGg42Zp0gaZ6kqc3uh5mZJQ42Zusg6XRJxze7H2ZmVh8HG7N1Ox04vsl9MDOzOjnYmJmZWWk42NjbmqSpeR3LiZIWSXpa0j6S/lfScklTJPXPdQ/O9ZdLekXS/0japqq9ebnO1pJulbRU0kJJV0raINe5QFJICmA74ODKtqR5bfSzzfbMzKznONhYb/BeYCQwFtgeuA/4CzAR+DjwCUn/BNwDbAl8C7gaOAp4QNLgqvY2BqYBbwJnAHOB04BT8/7bgOPyn8XAHwvbp9foX3vtrUXSKEmtkloXLVpUz3tgZmZ1UEQ0uw9mbcpPHH0U2Ab4E/AG8PuI2F3Sx4EpwCnAt4HXgN0j4i/52P2Be4GfRcQxuWweaRRmbER8KZdtBrwETImII6rOPw+YFxGHtNG/htqrpaWlJVpbW+t7Q8zMDABJsyKipbrcIzbWG7wUES9FxMq8/bv8urLwOhC4oRJqACLifmAmcISkvoX23gC+Waj3CrAAeFcH+9fV7ZmZWQc52FhvsKqd7S3z6/waxz4HDAA2KpQ9mcNH0Zsd716Xt2dmZh3kYGNlsDC/blNj3zbA68DSQtniLj5/V7dnZmYd5GBjZfAO0vqbkyS9s1Io6cPAfsCkiFjdwbYX89bRHjMzexvr1+wOmHWB5aQFxD8GHpQ0FtgM+AqwCPh6J9oeD1wg6VLgD6SnspZExBWd67KZmXUHBxsrhYj4iaRFwAXAd4EVpFBydkQ814mmLwY2BL4AbEUKSud3rrdmZtZd/Li3WZP5cW8zs8b5cW8zMzMrPQcbMzMzKw0HGzMzMysNBxszMzMrDQcbMzMzKw0HGzMzMysNBxszMzMrDQcbMzMzKw0HGzMzMysNBxszMzMrDQcbMzMzKw0HGzMzMysNBxszMzMrDQcbMzMzKw0HGzMzMyuNfs3ugJl13JCzJq5VNu+SEU3oiZnZ24NHbMzMzKw0HGx6GUnzJE1tdj/KRtJUSfPeru2ZmVl9HGzeZiSdLun4ZvfDzMysN3Kwefs5HTi+yX0wMzPrlRxszMzMrDQcbKpImi2pNf+8jaSQ9EDeHpy3z8/bB0i6U9IySYslTZK0R402h0v6raQlud4USXsX9l+Q2w1gO+DgynZb6zQkbS3pVklLJS2UdKWkDarq1Nu/kDROUl9JX83vwf2deA/bPW9lrVCd17GvpMmS/pzbu0vS/jXOu72kWyS9Kmm5pHvaqLe/pPskvZ77cVIb17GtpJtyv/4i6QFJR3W0PTMz634ONmubAewqqQ/wgVy2e97eLW/PlHQ4MBXoD5wJXAzsCMyQtGulMUnDgAnAAOBs4DvADsBkSRvnarcBx+U/i4E/FrZPr9HHjYFpwJvAGcBc4DTg1MJ56+pfQR/g58CFwB+AKW2/RW1r8Lz1XMcw4F5gV+DbpPdvG2CapIML9XYEHgA+CVwJnEsKiVNznyr19gZ+BbwvX+t1wH8AH6y6jm2BB4GPApcBXweWAbdLGtloezXep1GSWiW1Llq0aF1VzcysERHhP4U/wAlAkMLHWaRQ8gbwftKH25vAJsBTwMPA5sDA/Ocj+dgxhfZOA24HtiiUHZ7rHV7j/POAqevo37x87LWFss2AvwIT8rbq7V+uH8BrwExgk068d3Wft57ryGVzgT8BmxfKdsjH/m+hbCKwCti7ULYJsAB4Adggl92ajy3WG57L5hXK/gtYTgqzlevYAngReKRQr6721vVnn332iY7a7swJa/0xM1sfAK1R4/+p/oK+tc3Mr0NJIzatwLb556HAE8Ag0ocrwMIabexZ+SEixgBjJA2UNAJoAT6Xd2/ewT6+AXyzcI5XJC0A3pWLdqq3fwV9gGMi4tUO9qkj513ndUjaKbd5fUS8XKj3tKR+pPCApA2BjwPTIuLhQr1XJY0jBdR9gfuBA4E/VtWbLOn5qr4NJ42y/b7GdWwpqV9ErGqgPTMz6wEONmt7DFjKmmDzM9I0QyXYzCAFG4BxwI9qtLGs8oOkXYBrSR+AK4BHSFMmO3eij09GxCtVZW8Wfq67fwXjI+LZTvSpI+dt7zoqwe+F6oYiYnVhczPS7/L8Gud8Lr9umV83BR6tUe+FQh1I1/IwaYqslmiwPTMz6wEONlUiIiQ9SFoj8X5gDinYHEialriJtA4GYEVE3F08XtJeVU3eAWwEHARMj4jVklqAL3Sim4vr3F9P/yqWd6I/HT1ve9dRWXzy3uodeQH3FhFxCmmqahVp7U21SlllBGkpawJY0RY1+rZhjevYgRS4+gKrG2jPzMx6gBcP1zYDOJo0VfIUKdyMIE2RzCCt+3gGOErSRpWDJG1NWnB6bt7ejBSO7omIe3OoEfDFdZx7MSkIdUZd/esGXXreiJhLmvo7WtLfpu0kbQJ8jbxANyJWAHeTnib7QKHeRqTvBHopnx9gOjBU0m6FeocAQ6pOP5m0iHzfQr2+pAXWvyAFqUbaMzOzHuARm9pmkkLfo3kEZ07eXgHMyWWnkj7kZkkam/eNBlYCF8Hf1ow8Dxwp6Rt537GkdTaQ1nBUGw9cIOlS0tNJ2wNLIuKKejtfb/+6WjeddzQwCXhQ0lW5nROBvwPOKdQ7nbSGZpqkH5CmvUaTRlc+HRErc72LgE8Ad0m6knRfzwBerzrveaQnrH4laQxpsfNRwO7A6Ih4s8H2zMysB3jEprYZ+XUOQEQsIE2LzMoLRomIScChpBGKc0mP+j4LHBQRDxXaOoK0puY84HzSOpBhpGmMI2qc+2LgEuCfgeuBUaQnlhrSQP+6VFefNyLuIT1y/UfS+3cO6cmk/YrTRBHxOPAh4E5SyPk34Hng0IgYX6g3HTiMdB++DfxrrltZNF6pNz+3dztphO0K0pTTsRFxTaPtmZlZz1B6YsrMmqWlpSVaW1ub3Q0zs15F0qyIaKku91SUtUtSPU/3rIqI9hYDm5mZdSsHG6vHgjrqPA7s0t0dMTMzWxcHG6vHYXXUaXgdkJmZWVdzsLF2VX+Xi5mZ2duVn4oyMzOz0nCwMTMzs9JwsDEzM7PS8PfYmDWZpEWkLzHsKgNp/9/hst7N97j8fI/bt11ErPVv9TnYmJWMpNZaX1pl5eF7XH6+xx3nqSgzMzMrDQcbMzMzKw0HG7PyGdvsDli38z0uP9/jDvIaGzMzMysNj9iYmZlZaTjYmJmZWWk42JiVhKShkiZKWiLpJUkXSvJ/472cpNGSaq4Z8D3vvSSdKOn3klZKekPSNEl7VtXx/e0A/yOYZiUgaWfgN6S/rFwG9AfOJP03/q0mds06QdIxwFVt7PM976UknQ5cAUwDrgG2AE4HpkraLSIW+P52nIONWTlcDrwH+FBEPAwg6UVgjKTrI+KZpvbOGpL/Vv4d0gfZS8DWNar5nvdCkgYBFwPXRcSoQvmTwI3AccCl+P52mIe0zHo5Se8BhgMTKv8DzG4AVgCfakrHrDP2AEaR7t1d1Tt9z3u1dwMXAWdUlbfm1y18fzvHwcas99uVNPr6q2JhRKwE5gD7NKNT1inzgd0iYnwb+33Pe6mIeDoiLoqIJVW79suvv8P3t1McbMx6v03z69M19i0EhvRcV6wrRMSfImLROqr4npeIpA2Ar5Hu3R34/naK19iY9X6Vv6D8pca+5cBGPdgX6xm+5+VyPmmU5oSI+HPhySff3w7wiI1Z77c8v6rGvj7Ahj3YF+sZvuclIWk4cDbw04gYl4t9fzvBwcas93shv25fY9/mwNIe7Iv1DN/zEpC0C3AL8ChwYmGX728nONiY9X5Pkf5Hd3CxUFJfoAV4sRmdsm7le97LSdoKmAS8DvxDRLxW2O372wkONma9XESsJi04PFrS4MKufybNxU9pRr+s+/ie92451PwKGAQcERHPFff7/naO/3VvsxLI31L6EPAc6VtJtwT+nbT4cPeI+FMTu2edIGkcMDIiVFXue95LSboP2B/4b9b+nqKFEXGX72/HOdiYlYSkg4CbWPMo6FPA5yNiZtM6ZZ3WVrDJ+3zPexlJWwIL1lFlWkQckuv6/naAg41ZieTvw9ifNM18f0S80eQuWTfzPS8339/GOdiYmZlZaXjxsJmZmZWGg42ZmZmVhoONmZmZlYaDjZmZmZWGg42ZmZmVhoONmZmZlcb/B76ofzHBIXOmAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 特征和标签\n",
    "X = df[['user_category_encoded', 'year', 'month', 'day', 'weekday', 'is_weekend', 'weather_encoded']]\n",
    "y = df['时长']\n",
    "\n",
    "# 划分数据集\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n",
    "\n",
    "# 创建线性回归模型model\n",
    "##################################begin######################################\n",
    "model = LinearRegression()\n",
    "###################################end#######################################\n",
    "\n",
    "# 使用X_train数据, y_train标签训练模型\n",
    "##################################begin######################################\n",
    "model.fit(X_train, y_train)\n",
    "###################################end#######################################\n",
    "\n",
    "# 预测X_test数据的结果，赋值为y_pred\n",
    "##################################begin######################################\n",
    "y_pred = model.predict(X_test)\n",
    "###################################end#######################################\n",
    "\n",
    "mse = mean_squared_error(y_test, y_pred)\n",
    "rmse = np.sqrt(mse)\n",
    "r2 = r2_score(y_test, y_pred)\n",
    "\n",
    "print(f'MSE: {mse}')\n",
    "print(f'RMSE: {rmse}')\n",
    "print(f'R^2: {r2}')\n",
    "\n",
    "# 可视化特征重要性\n",
    "feature_importance = pd.Series(index=X.columns, data=model.coef_)\n",
    "feature_importance.sort_values().plot(kind='barh')\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
